[アップデート] 複数の VPC から RDS Proxy を経由したデータベース接続が可能になりました
本日のアップデートで複数の VPC から RDS プロキシ を経由して Aurora/RDS への接続が可能になりました。
複数 VPC からの RDS プロキシを利用可能
これまでは RDS プロキシは Aurora/RDS が配置されいる VPC 内でのみ利用可能でしたが、今回のアップデートにより異なる VPC 内の EC2 や Lambda からも RDS プロキシを経由して Aurora/RDS への接続が可能になりました。
VPC 間で Aurora/RDS に接続する場合、従来は以下のように VPC ピアリングなどを用いてネットワーク的に接続しているかと思います。
VPC ピアリングのようにネットワークまるごとを接続したくない場合に、RDS プロキシを利用することで対象の Aurora/RDS のみと接続することが可能になります。
注意点
- RDS プロキシには、データベースインスタンスの vCPU 数に基づいて料金が発生します
vCPU あたり $0.018/h
- 他 VPC 用の RDS プロキシエンドポイントのみを作成することは出来ない
- Aurora/RDS と同一 VPC 内の RDS プロキシを作成したうえで、追加の RDS プロキシエンドポイントとしてのみ作成可能
- Aurora または RDS インスタンスで利用可能
- ただし、リーダーエンドポイントは Aurora クラスターのみ対応
- 同一アカウント内でのみ利用可能
RDS プロキシの追加のエンドポイント料金や、VPC 間のデータ転送料金等について執筆時点で価格表には記載がありませんでしたので、今後、アップデートされましたら追記いたします。
やってみる
今回は以下の環境で検証しました。
- 東京リージョン
- VPC-A
- Aurora クラスター
- エンジンバージョン: 5.7.mysql_aurora.2.07.2
- インスタンス: db.t3.small
- プライマリーおよびレプリカを 1 インスタンスずつ
- 同一 VPC 内の RDS プロキシは作成済み
- VPC-B
- クライアントは EC2
- VPC 間のピアリング接続は無し
他 VPC 向けの RDS プロキシエンドポイントを追加
今回の検証は既に同一 VPC 内の RDS プロキシは作成済みの状態です。RDS プロキシをまだ作成されてない場合は、以下の記事を参考に作成してください。
事前に作成しておいた RDS プロキシを管理コンソールより開き、[Proxy endpoints] - [Create proxy endpoint] をクリックします。
追加のエンドポイント名を入力。[Target role] で追加のエンドポイントを Read/write
にするか、同日にリリースされたリーダーエンドポイント Read-only
にするか選択することができます。先述のとおり Read-only
は Aurora クラスターでのみ利用可能です。
次に [接続] メニューで接続元の VPC を指定することができます。サブネットは最低 2 つ指定が必要です。ここで指定する VPC セキュリティグループは EC2 や Lambda から Aurora/RDS のデータベース接続ポートへの許可ルールが設定されているものを指定し、[Create proxy endpoint] をクリックします。
しばらくすると、追加の RDS エンドポイントが 利用可能
になります。このエンドポイントを利用して接続確認します。
接続確認
この検証環境ではご覧のとおり VPC ピアリングはありません。
vpc-b3xxxxxx
内の EC2 から RDS エンドポイントに接続して、vpc-2fxxxxxx
内の Aurora クラスターに接続してみます。
$ mysql -uXXXX -pXXXXXX -h cross-vpc-rds-proxy.endpoint.proxy-XXXXXXXXXX.ap-northeast-1.rds.amazonaws.com Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 2046098010 Server version: 5.7.12 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | testdb | +--------------------+ 5 rows in set (0.03 sec)
問題なく接続できていますね! 検証は以上です。
さいごに
従来は VPC ピアリング等を利用して VPC 間での Aurora/RDS 接続していたかと思いますが、今回のアップデートにより RDS プロキシ経由での接続が可能となりました。
「VPC のネットワーク単位では分離を維持しておきたいが、異なる VPC 内の Aurora/RDS に接続したい」といった場面で利用できそうですね!特にネットワーク単位で変更を加えたくない一時的な利用は、とてもマッチするユースケースではないでしょうか。
一方で RDS プロキシおよび RDS プロキシエンドポイントの追加には料金が発生しますので、恒久的に利用するような場合はコストを掛けて RDS プロキシを利用する必要があるのか、RDS プロキシでなければ課題を解決できないのか、よく検討いただくのが良いかと思います。
現状は同一アカウント内でのみ利用可能ですが、ここまで来ると「AWS アカウント間で RDS プロキシを利用できるようにならないですかね?」という気持ちが芽生えて来た方は是非、AWS へフィードバックを送りましょう。
以上!大阪オフィスの丸毛(@marumo1981)でした!